home *** CD-ROM | disk | FTP | other *** search
/ Interactive Media Design Review 1999 / Interactive Media Design Review 1999.iso / pc / Demos / Bombardier_PC / DATACH.CST / 00001_Script_1 next >
Text File  |  1999-03-07  |  32KB  |  960 lines

  1. -- database routines
  2.  
  3. global DBRECORD
  4. global DBHANDLE
  5.  
  6. -- init database pointers
  7.  
  8. on initDBch
  9.   global currentdb
  10.   if (currentdb = "aircraft.mdb") and (DBHANDLE>0) then
  11.     nothing
  12.   else
  13.     --    alert ("loading databasech" & currentdb)
  14.     set currentdb = "aircraft.mdb"
  15.     if objectp(DBHANDLE) then 
  16.       DGclose(DBHANDLE)
  17.       set DBHANDLE = 0
  18.     end if
  19.     --  set DBHANDLE = DGopenDataBase("aircraft.mdb")
  20.     set dbHandle = DGOpenDatabase(the moviePath & "aircraft.mdb")
  21.     if dbHandle = "#ERROR#" then 
  22.       alert "Error: " & GetLastDGError()
  23.       alert "open db."
  24.       ClearDGError()
  25.       --quit
  26.     end if  
  27.   end if
  28. end
  29.  
  30.  
  31. -- set current plane global based on movie name
  32. -- and set flags for reread of data when planes change
  33.  
  34. on initcurrentplane
  35.   global CurrentPlane, cheraseflag
  36.   global flag_Hour, flag_specs, oldmoviename
  37.   set tCurrentPlane = "test"
  38.   --  alert(the movieName & " vs. " & CurrentPlane)
  39.   if the movieName <> oldmoviename then
  40.     set oldmoviename = the movieName
  41.     if the movieName = "Global.dir" then set tCurrentPlane = "Global Express"
  42.     if the movieName = "Se.dir" then set tCurrentPlane = "Canadair SE"
  43.     if the movieName = "CH604.dir" then set tCurrentPlane = "Challenger 604"
  44.     if the movieName = "Lear31a.dir" then set tCurrentPlane = "Learjet 31a"
  45.     if the movieName = "Lear45.dir" then set tCurrentPlane = "Learjet 45"
  46.     if the movieName = "Lear60.dir" then set tCurrentPlane = "Learjet 60"
  47.     set cheraseflag = TRUE
  48.     set flag_Hour = TRUE
  49.     set flag_specs = TRUE
  50.     set CurrentPlane = tCurrentPlane
  51.   end if
  52. end
  53.  
  54.  
  55.  
  56. -- fill database using field names as database reference
  57. --
  58. --   note: 1st char of castmember name is formating character
  59. --     as follows:    F - feet 
  60. --                    S - Square Feet
  61. --                    A - Cubic Feet
  62. --                    D - Degree
  63. --                    N - decimal if under 10 otherwise integer only
  64. --                    M - Mach
  65. --                    U - Knots
  66. --                    Y - Nautical Miles
  67. --                    I - Inch
  68. --                    W - Lps
  69. --                    X - Feet per Second
  70. --                    K - Time (in HH:MM)
  71. --                    T - Text (no translation)
  72. --                    P - Percent %
  73. --                    Z - feet per minute
  74. --   Remaining characters should exactly match database field names
  75. --
  76. -- Pass routine membernum of 1st database field to fill, will continue filling
  77. -- castmembers until it reaches a castmember named "***end***"
  78.  
  79.  
  80. on fillDataBaseFields startingcast
  81.   global togglestate
  82.   set currentDBcast = startingcast
  83.   set the floatPrecision = 2
  84.   repeat while true
  85.     set findname = the name of member currentDBcast
  86.     if findname = "***end***" then
  87.       exit repeat
  88.     else
  89.       set chFormat = char 1 of findname
  90.       delete char 1 of findname
  91.       --      put findname
  92.       set tempdata = DGRSgetFieldValue(findname,DBRECORD)
  93.       if tempdata = "#ERROR#" then
  94.         put "error:"&&GetLastDGError()&&findname
  95.       else
  96.         if togglestate = 0 then                -- standard numbering (imperial)
  97.           case (chformat) of
  98.             "F":
  99.               set outnum = float(value(tempdata)) 
  100.               set tempdata = formatch(outnum) & " ft"
  101.             "S":
  102.               set outnum = float(value(tempdata)) 
  103.               set tempdata = formatch(outnum) &" ft" & numtochar(178) 
  104.             "A":
  105.               set outnum = float(value(tempdata)) 
  106.               set tempdata = formatch(outnum) & " ft" & numtochar(179) 
  107.             "D":
  108.               set outnum = float(value(tempdata)) 
  109.               set tempdata = formatch(outnum) & " deg"
  110.             "N":
  111.               set outnum = float(value(tempdata)) 
  112.               set tempdata = formatch(outnum)
  113.             "M":
  114.               set the floatPrecision = 2
  115.               set outnum = float(value(tempdata)) 
  116.               set tempdata = "M" & string(outnum)
  117.             "P":
  118.               set outnum = float(value(tempdata)) 
  119.               set tempdata = formatch(outnum) & "%"
  120.             "U":
  121.               set outnum = float(value(tempdata)) 
  122.               set tempdata = formatch(outnum) & " kts"
  123.             "Y":
  124.               set outnum = float(value(tempdata)) 
  125.               set tempdata = formatch(outnum) & " nm"
  126.             "I":
  127.               set outnum = float(value(tempdata)) 
  128.               set tempdata = formatch(integer(outnum)) & " in"
  129.             "W":
  130.               set outnum = float(value(tempdata)) 
  131.               set tempdata = formatch(integer(outnum)) & " lbs"
  132.             "X":
  133.               set outnum = float(value(tempdata)) 
  134.               set tempdata = formatch(outnum) & " ft/sec"
  135.             "Z":
  136.               set outnum = float(value(tempdata)) 
  137.               set tempdata = formatch(outnum) & " ft/min"
  138.             "K":
  139.               set xch = the number of chars in tempdata
  140.               set tempdata = char 1 to (xch - 6) of tempdata
  141.             "T":
  142.               --          set tempdata = string(tempdata) 
  143.           end case
  144.         else                                                -- metric conversion
  145.           case (chformat) of
  146.             "F":
  147.               set outnum = float(value(tempdata)) 
  148.               set outnum2 = float(outnum * .30480)
  149.               set tempdata = formatch(outnum2) & " m"
  150.             "S":
  151.               set outnum = float(value(tempdata)) 
  152.               set outnum2 = float(outnum * .092903)
  153.               set tempdata = formatch(outnum2) & " m" & numtochar(178) 
  154.             "A":
  155.               set outnum = float(value(tempdata)) 
  156.               set outnum2 = float(outnum * .028317)
  157.               set tempdata = formatch(outnum) & " m" & numtochar(179) 
  158.             "D":
  159.               set outnum = float(value(tempdata)) 
  160.               set tempdata = formatch(outnum) & " deg"
  161.             "N":
  162.               set outnum = float(value(tempdata)) 
  163.               set tempdata = formatch(outnum)
  164.             "M":
  165.               set the floatPrecision = 2
  166.               set outnum = float(value(tempdata)) 
  167.               set tempdata = "M" & string(outnum)
  168.             "P":
  169.               set outnum = float(value(tempdata)) 
  170.               set tempdata = formatch(outnum) & "%"
  171.             "U":
  172.               set outnum = float(value(tempdata)) 
  173.               set tempdata = formatch(outnum) & " kts"
  174.             "Y":
  175.               set outnum = float(value(tempdata)) 
  176.               set outnum2 = float(1.8520 * outnum)
  177.               set tempdata = formatch(outnum2) & " km"
  178.             "I":
  179.               set outnum = float(value(tempdata))
  180.               set outnum2 = float(outnum * 2.54)
  181.               set tempdata = formatch(outnum2) & " cm"
  182.             "W":
  183.               set outnum = float(value(tempdata)) 
  184.               set outnum2 = float(outnum * .45359)
  185.               set tempdata = formatch(outnum2) & " kg"
  186.             "X":
  187.               set outnum = float(value(tempdata)) 
  188.               set outnum2 = float(outnum * .30480)
  189.               set tempdata = formatch(outnum2) & " m/sec"
  190.             "Z":
  191.               set outnum = float(value(tempdata)) 
  192.               set outnum2 = float(outnum * .30480)
  193.               set tempdata = formatch(outnum2) & " m/min"
  194.             "T":
  195.               --          set tempdata = string(tempdata) 
  196.           end case
  197.         end if
  198.       end if
  199.       set the text of member currentDBcast = string(tempdata)
  200.     end if
  201.     set currentDBcast = currentDBcast + 1
  202.   end repeat
  203. end
  204.  
  205. -- fill specifications screen variables
  206. --
  207. -- open data table and call routine to fill fields
  208.  
  209. on fillspecs dataplanename, startingcast
  210.   set DBRECORD = DGcreateRecordset("SELECT * FROM Aircrafts", DBHANDLE)
  211.   set chquery = "Aircraft = " & QUOTE & dataplanename & QUOTE
  212.   set outresult =DGRSfindFirst(chquery, DBRECORD) 
  213.   -- put dataplanename & " - "outresult & "= out"
  214.   if outresult<> 0 then
  215.     fillDataBaseFields(startingcast)
  216.   else
  217.     alert("not found-"&dataplanename)
  218.   end if
  219.   if DGRSIsOpen(DBRECORD) then 
  220.     DGRSClose(DBRECORD)
  221.   end if  
  222. end
  223.  
  224.  
  225. -- fill configuration screen variables
  226. --
  227. -- open data table and call routine to fill fields
  228.  
  229. on fillconfig dataplanename, startingcast
  230.   set DBRECORD = DGcreateRecordset("SELECT * FROM Configurations", DBHANDLE)
  231.   set chquery = "Aircraft = " & QUOTE & dataplanename & QUOTE
  232.   DGRSfindFirst(chquery, DBRECORD)
  233.   fillDataBaseFields(startingcast)
  234.   if DGRSIsOpen(DBRECORD) then 
  235.     DGRSClose(DBRECORD)
  236.   end if  
  237. end
  238.  
  239. --InitDB   set dbhandle to database dbname if not already loaded
  240.  
  241. on InitDB dbName
  242.   global currentdb
  243.   if (currentdb = dbname) and (DBHANDLE>0) then
  244.     nothing
  245.   else
  246.     --    alert ("loading database :" & currentdb & ":" & objectp(DBHANDLE) )
  247.     set currentdb = dbname
  248.     if objectp(DBHANDLE) then 
  249.       DGclose(DBHANDLE)
  250.       set DBHANDLE = 0
  251.     end if
  252.     set dbHandle = DGOpenDatabase(the moviePath & dbName)
  253.     if dbHandle = "#ERROR#" then 
  254.       alert "Error: " & GetLastDGError()
  255.       alert "open db."
  256.       ClearDGError()
  257.       --quit
  258.     end if
  259.   end if
  260. end 
  261.  
  262. -- routines called from popups
  263.  
  264. -- change plane for bjs datasheets
  265. -- airplanename = plane to change data to look at
  266.  
  267. on Disbjs airplanename
  268.   global gxcompetitor
  269.   global currentChartName, currentplane, chCompDisplay
  270.   -- put "plane =" & airplanename
  271.   set the text of member "disPlane" to airplanename
  272.   set currentplane = airplanename
  273.   disincome airplanename
  274. end
  275.  
  276.  
  277. -- change plane for 1 of 3 colums in bjs
  278. -- airplanename = plane to change to
  279. -- columused = colum of data to fill
  280.  
  281. on Disbjscol airplanename, columused
  282.   global gxcompetitor
  283.   global currentChartName, currentplane, chCompDisplay
  284.   if airplanename = "NONE" then
  285.     bjsclearcolum(columused)
  286.   else
  287.     -- put "plane =" & airplanename
  288.     set the text of member "disPlanecol"&columused to airplanename
  289.     set the text of member "disPercentcol"&columused to "1/8"
  290.     calcFReportsingle(columused)
  291.   end if
  292. end
  293.  
  294. -- change percent of ownership for 1 of 3 colums in bjs
  295. -- airplanepercent = percent to change to
  296. -- columused = colum of data to fill
  297.  
  298. on Disbjsfraction airplanepercent, columused
  299.   global gxcompetitor
  300.   global currentChartName, currentplane, chCompDisplay
  301.   -- put "plane =" & airplanepercent
  302.   set the text of member "disPercentcol"&columused to airplanepercent
  303.   calcFReportsingle(columused)
  304. end
  305.  
  306. -- called from plane popups to change competitor
  307. -- airplanename = plane to compare
  308.  
  309. on DisSpecs airplanename
  310.   global gxcompetitor
  311.   global currentChartName, currentplane, chCompDisplay
  312.   global Out_Text
  313.   watchcursor()
  314.   -- put "plane =" & airplanename
  315.   set the text of member "disPlane" to airplanename
  316.   set the text of member "aacplanename" to airplanename
  317.   if airplanename = "NONE" then 
  318.     set the text of member "disPlane" = "No Competitor"
  319.     set the text of member "aacplanename" = "No Competitor"
  320.   end if
  321.   if currentChartName = "all" then
  322.     if airplanename = "NONE" then      
  323.       --   clear fields for competitive aircraft
  324.       set xcastnum = ( the number of member "CHDBdaircrafts" ) + 1
  325.       erasedatabasefields(xcastnum)
  326.       set xcastnum = ( the number of member "CHDBdconfig" ) + 1
  327.       erasedatabasefields(xcastnum)
  328.     else
  329.       --  put in data for specifications screens
  330.       set xcastnum = ( the number of member "CHDBdaircrafts" ) + 1
  331.       fillspecs(airplanename, xcastnum)
  332.       set xcastnum = ( the number of member "CHDBdconfig" ) + 1
  333.       fillconfig(airplanename, xcastnum)
  334.     end if
  335.     --    updatestage
  336.   else
  337.     if currentChartName = "Range_maps" then
  338.       getassumptions()
  339.       set the text of field "gxassumptions" = Out_Text
  340.       if airplanename <> "NONE" then
  341.         -- fill in range data for competitor
  342.         set gxcompetitor = airplanename
  343.         fillgxcompetitor
  344.       else
  345.         -- erase range competitor
  346.         set gxcompetitor = "No Competitor"
  347.         repeat with sx = 11 to 14
  348.           set cx = the member of sprite sx
  349.           set the text of member cx = " "
  350.         end repeat
  351.         set cx = the member of sprite 6
  352.         set the text of member cx = " "
  353.         set cx = the member of sprite 16
  354.         set the text of member cx = " "
  355.       end if  
  356.     else
  357.       -- performace graph
  358.       if chCompDisplay <> "" then
  359.         go to "chartblank"
  360.         updatestage
  361.         go to "chartback"
  362.         updatestage
  363.         chewchart(currentplane,currentplane, 14)    -- redraw main planes chart
  364.       end if 
  365.       getassumptions()
  366.       set the text of field "chartassumptions" = Out_Text
  367.       if airplanename <> "NONE" then
  368.         chewchart(currentplane,airplanename, 15)    -- draw competitor chart
  369.         set chCompDisplay = airplanename
  370.       end if
  371.     end if
  372.   end if  
  373.   arrowcursor()
  374. end
  375.  
  376. -- fill specification screen for main plane
  377.  
  378. on MainSpecs airplanename
  379.   global currentPlane
  380.   set airplanename to currentPlane
  381.   set xcastnum = ( the number of member "CHDBaircrafts" ) + 1
  382.   fillspecs(airplanename, xcastnum)
  383.   set xcastnum = ( the number of member "CHDBconfig" ) + 1
  384.   fillconfig(airplanename, xcastnum)
  385.   updatestage
  386. end
  387.  
  388. -- set cursors to indicate system activity
  389.  
  390. on watchcursor
  391.   set watchy = the number of member "watch_cursor"
  392.   set watchmsk = the number of member "watch_cursor_mask"
  393.   cursor [watchy, watchmsk]
  394. end
  395.  
  396. on arrowcursor
  397.   cursor -1
  398. end
  399.  
  400. -- read values for specification screens
  401.  
  402. on setupspecs
  403.   -- ch added  (set current plane)
  404.   watchcursor()
  405.   global currentPlane
  406.   global DBRECORD, DBHANDLE 
  407.   global currentChartName
  408.   initcurrentplane  -- get back plane name
  409.   --  set currentplane = "Learjet 31a"
  410.   set currentChartName = "all"
  411.   --  set DBRECORD = 0
  412.   --  set DBHANDLE = 0
  413.   getaircrafts  -- fill competitor popups
  414.   --  initdbch
  415.   mainspecs
  416.   --  dispecs
  417.   arrowcursor()
  418. end
  419.  
  420. -- unpuppet all sprites used
  421.  
  422. on clearpups
  423.   repeat with spx = 2 to 59
  424.     set the visible of sprite spx = true
  425.     puppetsprite spx, false
  426.   end repeat
  427. end
  428.  
  429. --- Range Maps 
  430. -- fill data screens for range maps based on globals set
  431.  
  432. on fillGXdata
  433.   global gxnewmember, gxcity
  434.   global currentplane
  435.   global gxsprite, gxpair
  436.   global gxcompetitor
  437.   global Out_Text
  438.   watchcursor() 
  439.   puppetsprite 2, true
  440.   set the member of sprite 2 = gxnewmember    -- change background map
  441.   
  442.   -- get data from query 
  443.   
  444.   -- open query
  445.   set qdHandle =DGQDOpen("Range_MapValues",dbHandle)
  446.   if qdHandle="#ERROR#" then
  447.     alert "Error:"&&GetLastDGError()
  448.   end if
  449.   
  450.   -- set parameters for query
  451.   if DGQDsetParameterValue("Bomb plane", currentplane, qdhandle) = "#ERROR#" then 
  452.     put "b:"&&GetLastDGError()
  453.   end if
  454.   if DGQDsetParameterValue("Model", currentplane, qdhandle) = "#ERROR#" then 
  455.     put "p:"&&GetLastDGError()
  456.   end if
  457.   if   DGQDsetParameterValue("Range_Maps.City", GXcity, qdhandle) = "#ERROR#" then 
  458.     put "c:"&&GetLastDGError()
  459.   end if
  460.   
  461.   -- execute query (get recordset)
  462.   set DBRECORD=DGQDCreateRS(qdHandle)
  463.   if DBRECORD = "#ERROR#" then
  464.     alert "DB ERROR - (No city?)"
  465.   else
  466.     set xcastnum = ( the number of member "CHDBmainrange" ) + 1
  467.     fillDataBaseFields(xcastnum)
  468.     set tempspeed = getfieldvalue(xcastnum,"TSpeed")
  469.     if tempspeed < 10 then
  470.       set tempdist = getfieldvalue(xcastnum,"TESAD")
  471.       setfieldvalue(xcastnum, "TDistance", tempdist)
  472.     end if
  473.     set chpax = DGRSGetFieldValue("Pax",DBRECORD)
  474.     set the text of field "aPax" = string(chpax)
  475.     set chpax = DGRSGetFieldValue("typical corporate bow",DBRECORD)
  476.     set the text of field "agxweight" = string(chpax)
  477.     
  478.     updatestage
  479.     
  480.     -- close database 
  481.     if DGQDIsOpen(qdhandle) then
  482.       DGQDClose(qdhandle)
  483.     end if 
  484.     if DGRSIsOpen(DBRECORD) then 
  485.       DGRSClose(DBRECORD)
  486.     end if  
  487.   end if
  488.   -- fill competitor fields (if there is one)
  489.   if gxcompetitor <> "No Competitor" then
  490.     fillgxcompetitor
  491.   end if
  492.   getassumptions
  493.   set the text of field "gxassumptions" = Out_Text
  494.   arrowcursor()
  495. end
  496.  
  497. -- fill range maps competitor figures
  498.  
  499. on fillgxcompetitor
  500.   global gxnewmember, gxcity
  501.   global currentplane
  502.   global gxcompetitor
  503.   global DBRECORD
  504.   watchcursor()  
  505.   -- get data from query (if there is a city chosen)
  506.   if length(GXcity) > 3 then
  507.     set qdHandle =DGQDOpen("Range_MapValues",dbHandle)
  508.     if qdHandle="#ERROR#" then
  509.       alert "Error:"&&GetLastDGError()
  510.     end if
  511.     if DGQDsetParameterValue("Bomb plane", currentplane, qdhandle) = "#ERROR#" then 
  512.       put "b:"&&GetLastDGError()
  513.     end if
  514.     if DGQDsetParameterValue("Model", gxcompetitor, qdhandle) = "#ERROR#" then 
  515.       put "p:"&&GetLastDGError()
  516.     end if
  517.     if   DGQDsetParameterValue("Range_Maps.City", GXcity, qdhandle) = "#ERROR#" then 
  518.       put "c:"&&GetLastDGError()
  519.     end if
  520.     set DBRECORD=DGQDCreateRS(qdHandle)
  521.     if DBRECORD = "#ERROR#" then
  522.       alert "DB ERROR - (No city?)"
  523.     else
  524.       set xcastnum = ( the number of member "CHDBcomprange" ) + 1
  525.       fillDataBaseFields(xcastnum)
  526.       set tempspeed = getfieldvalue(xcastnum,"TSpeed")
  527.       if tempspeed < 10 then
  528.         set tempdist = getfieldvalue(xcastnum,"TESAD")
  529.         setfieldvalue(xcastnum, "TDistance", tempdist)
  530.       end if
  531.       set isroute = DGRSGetFieldValuech("Route_Capability",DBRECORD)
  532.       if isroute = "#ERROR#" then
  533.         set the text of field "cPax" = " "
  534.         set the text of field "cgxweight" = " "
  535.         set xcastnum = ( the number of member "CHDBcomprange" ) + 1
  536.         junkDataBaseFields(xcastnum,"Not Possible")
  537.       else
  538.         if isroute then
  539.           set chpax = DGRSGetFieldValue("Pax",DBRECORD)
  540.           set the text of field "cPax" = string(chpax)
  541.           set chpax = DGRSGetFieldValue("typical corporate bow",DBRECORD)
  542.           set the text of field "cgxweight" = string(chpax)
  543.         else
  544.           set the text of field "cPax" = " "
  545.           set the text of field "cgxweight" = " "
  546.           set xcastnum = ( the number of member "CHDBcomprange" ) + 1
  547.           junkDataBaseFields(xcastnum,"Not Possible")
  548.         end if
  549.       end if
  550.       updatestage
  551.       if DGQDIsOpen(qdhandle) then
  552.         DGQDClose(qdhandle)
  553.       end if 
  554.       if DGRSIsOpen(DBRECORD) then 
  555.         DGRSClose(DBRECORD)
  556.       end if   
  557.     end if
  558.   end if
  559.   arrowcursor()
  560. end
  561.  
  562. -- clear out bjs income totals
  563.  
  564. on clearincomstotals
  565.   repeat with i = 1 to 6
  566.     set the text of field "incret"&i = " "
  567.   end repeat
  568. end
  569.  
  570. -- Charting Routines
  571. --
  572. -- Draw a line
  573. --  spritenum = sprite # to draw with (trails on)
  574. -- sx = starting x, sy = starting y
  575. -- ex = ending x, ey = ending y
  576.  
  577. on drawaLine spritenum, sx, sy, ex, ey
  578.   global chartrect_left, chartrect_right, chartrect_top, chartrect_bottom
  579.   global Start_x, End_x, Start_y, End_y, Increment_x, Increment_y
  580.   
  581.   -- limit numbers to usable values (on Y axis)
  582.   if start_y < End_y then
  583.     if sy < start_y then 
  584.       set sy = start_y
  585.     end if
  586.     if sy > end_y then 
  587.       set sy = end_y
  588.     end if
  589.     if ey < start_y then 
  590.       set ey = start_y
  591.     end if
  592.     if ey > end_y then 
  593.       set ey = end_y
  594.     end if
  595.   else
  596.     if sy > start_y then 
  597.       set sy = start_y
  598.     end if
  599.     if sy < end_y then 
  600.       set sy = end_y
  601.     end if
  602.     if ey > start_y then 
  603.       set ey = start_y
  604.     end if
  605.     if ey < end_y then 
  606.       set ey = end_y
  607.     end if
  608.   end if
  609.   -- limit numbers to usable values (on X axis)
  610.   if sx < start_x then 
  611.     set sx = start_x
  612.   end if
  613.   if sx > end_x then 
  614.     set sx = end_x
  615.   end if
  616.   if ex < start_x then 
  617.     set ex = start_x
  618.   end if
  619.   if ex > end_x then 
  620.     set ex = end_x
  621.   end if
  622.   
  623.   -- calculate starting Y Position
  624.   if (sy = start_y) then
  625.     set startypos = chartrect_bottom
  626.   else
  627.     set startypos = chartrect_bottom - (1.0 * (sy - start_y) / (End_y - Start_y) * ¼
  628.        (chartrect_bottom - chartrect_top))
  629.   end if
  630.   
  631.   -- calculate ending Y Position
  632.   if (ey = start_y) then
  633.     set endypos = chartrect_bottom
  634.   else
  635.     set endypos = chartrect_bottom - (1.0 * (ey - start_y) / (End_y - Start_y) * ¼
  636.        (chartrect_bottom - chartrect_top))
  637.   end if
  638.   
  639.   -- calculate starting X Position
  640.   if (sx = start_x) then
  641.     set startxpos = chartrect_left
  642.   else
  643.     set startxpos = (1.0 * (sx - start_x) / (End_x - Start_x) * ¼
  644.        (chartrect_right - chartrect_left)) + chartrect_left
  645.   end if
  646.   
  647.   -- calculate ending X Position
  648.   if (ex = start_x) then
  649.     set endxpos = chartrect_left
  650.   else
  651.     set endxpos = (1.0 * (ex - start_x) / (End_x - Start_x) * ¼
  652.        (chartrect_right - chartrect_left)) + chartrect_left
  653.   end if
  654.   
  655.   -- calculate number of pixel difference
  656.   set ylp = abs(endypos - startypos)
  657.   set xlp = abs(endxpos - startxpos)
  658.   if ylp = xlp then
  659.     nothing
  660.   else
  661.     if ylp > xlp then
  662.       set drawloop = ylp
  663.     else
  664.       set drawloop = xlp
  665.     end if
  666.     set inc_y = ((endypos - startypos)*100) / drawloop
  667.     set inc_x = ((endxpos - startxpos)*100) / drawloop
  668.     set cur_x = startxpos * 100
  669.     set cur_y = startypos * 100
  670.     set the trails of sprite spritenum = true
  671.     
  672.     --   draw the line 
  673.     repeat with yloop = 1 to drawloop
  674.       set the loch of sprite spritenum = (cur_x / 100)
  675.       set the locv of sprite spritenum = (cur_y / 100)
  676.       updatestage
  677.       set cur_x = cur_x + inc_x
  678.       set cur_y = cur_y + inc_y
  679.     end repeat
  680.     set the loch of sprite spritenum = (cur_x / 100)
  681.     set the locv of sprite spritenum = (cur_y / 100)  
  682.     updatestage
  683.   end if
  684. end
  685.  
  686.  
  687. -- set up globals for chart printing
  688.  
  689. on setupchart
  690.   global paramchartredraw
  691.   global Start_x, End_x, Start_y, End_y, Increment_x, Increment_y
  692.   global chartrect_left, chartrect_right, chartrect_top, chartrect_bottom
  693.   global cLabel_x, cLabel_y, cParam_name, cParam_value
  694.   global currentchartname, currentPlane, fixedchartname
  695.   global Out_Text
  696.   watchcursor()
  697.   clearpups
  698.   getaircrafts                           -- fill competitor popups
  699.   cleartics()                            -- erase old screen number tics
  700.   go to "chartchange"                    -- clear old chart from screen
  701.   updatestage
  702.   go to "chartback"
  703.   updatestage
  704.   set fixedchartname = spacetounderscore(currentchartname)
  705.   set the text of field "dischart" = currentchartname
  706.   puppetsprite 9, true
  707.   set the member of sprite 9 = fixedchartname
  708.   -- set globals of chart from sprite size and position
  709.   set chartrect_left = the left of sprite 13
  710.   set chartrect_right = the right of sprite 13
  711.   set chartrect_top = the top of sprite 13
  712.   set chartrect_bottom = the bottom of sprite 13
  713.   -- load in chart info from database query and fill globals
  714.   set qdHandle =DGQDOpen("CoordinatesValues",dbHandle)
  715.   if qdHandle="#ERROR#" then
  716.     alert "Error:"&&GetLastDGError()
  717.   end if
  718.   if DGQDsetParameterValue("Model", currentplane, qdhandle) = "#ERROR#" then 
  719.     put "p:"&&GetLastDGError()
  720.   end if
  721.   if   DGQDsetParameterValue("Chart Name", fixedChartName, qdhandle) = "#ERROR#" then 
  722.     put "p:"&&GetLastDGError()
  723.   end if
  724.   set rsHandle=DGQDCreateRS(qdHandle)
  725.   set Start_x = DGRSGetFieldValue("Start-Point-x",rsHandle)
  726.   set End_x = DGRSGetFieldValue("End-Point-x",rsHandle)
  727.   set Start_y = DGRSGetFieldValue("Start-Point-y",rsHandle)
  728.   set End_y = DGRSGetFieldValue("End-Point-y",rsHandle)
  729.   set Increment_x = DGRSGetFieldValue("Increments-x",rsHandle)
  730.   set Increment_y = DGRSGetFieldValue("Increments-y",rsHandle)
  731.   set cLabel_x = DGRSGetFieldValue("Label-X",rsHandle)
  732.   set cLabel_y = DGRSGetFieldValue("Label-Y",rsHandle)
  733.   
  734.   -- labels in wrong position - flipped for display
  735.   set the text of member "Label-y" = cLabel_x
  736.   set the text of member "Label-x" = cLabel_y
  737.   if paramchartredraw <> 1 then
  738.     set cParam_name = DGRSGetFieldValue("Parameter_Name",rsHandle)
  739.     if length(cParam_name) > 3 then
  740.       set the text of member "param name" = "Select " & cParam_name
  741.       set the visible of sprite 16 = true  -- rollover triangle
  742.     else
  743.       set the text of member "param name" = " "  
  744.       set the visible of sprite 16 = false
  745.     end if
  746.     
  747.     -- parse parameter values for popup list
  748.     set paramlist = DGRSGetFieldValue("Parameter_Values",rsHandle)
  749.     put "" into field "param list"
  750.     set ix = the number of items in paramlist
  751.     set outfield = ""
  752.     if ix > 1 then
  753.       repeat with iloop = 1 to ix
  754.         set val = item iloop of paramlist
  755.         if char 1 of val = " " then
  756.           delete char 1 of val
  757.         end if
  758.         set cline = the linecount of member "param list"
  759.         put val&"" into line cline+1 of field "param list"
  760.       end repeat
  761.     else
  762.       set the text of  member "param list" = paramlist
  763.     end if
  764.     set cParam_value = item 1 of paramlist
  765.     set the text of member "current param" = cParam_value
  766.   end if
  767.   
  768.   --  close database references
  769.   if DGQDIsOpen(qdhandle) then
  770.     DGQDClose(qdhandle)
  771.   end if 
  772.   if DGRSIsOpen(rsHandle) then 
  773.     DGRSClose(rsHandle)
  774.   end if 
  775.   
  776.   -- draw edge numbers
  777.   drawtics()
  778.   
  779.   -- draw the chart
  780.   chewchart(currentplane,currentplane, 14)
  781.   
  782.   set airplanename = the text of member "disPlane"
  783.   if (length(airplanename) > 4) and (airplanename<>"No Competitor") then
  784.     chewchart(currentplane,airplanename, 15)    -- draw competitor chart
  785.     --    set chCompDisplay = airplanename
  786.   end if
  787.   getassumptions()
  788.   set the text of field "chartassumptions" = Out_Text
  789.   arrowcursor()
  790. end
  791.  
  792. -- erase edge numbers
  793.  
  794. on cleartics
  795.   repeat with xsprnum = 20 to 39 
  796.     puppetSprite xsprnum, false
  797.   end repeat    
  798. end
  799.  
  800. -- draw edge numbers from global variables
  801.  
  802. on drawtics
  803.   global Start_x, End_x, Start_y, End_y, Increment_x, Increment_y
  804.   global chartrect_left, chartrect_right, chartrect_top, chartrect_bottom
  805.   
  806.   -- calculate distribution of numbers
  807.   set cheight = chartrect_bottom - chartrect_top
  808.   set cwidth = chartrect_right - chartrect_left
  809.   -- left edge
  810.   if Increment_y <> 0 then
  811.     set chdiv = (end_y - start_y) / Increment_y
  812.     if chdiv < 0 then
  813.       set chdiv = 0 - chdiv
  814.       set Increment_y = 0 - increment_y
  815.     end if
  816.     if chdiv > 8 then 
  817.       set chdiv = 8
  818.       set Increment_y = abs((end_y - start_y) / chdiv)
  819.     end if
  820.     set chadd = cheight / chdiv
  821.     set xcastnum = ( the number of member "Left_Tics1" )
  822.     set curvalue = Start_y
  823.     set curv = chartrect_bottom
  824.     repeat with xsprnum = 20 to 39 
  825.       puppetSprite xsprnum, false
  826.     end repeat    
  827.     updatestage
  828.     if abs(end_y - start_y) < 10 then
  829.       set the floatPrecision = 2
  830.     else
  831.       set the floatPrecision = 0
  832.     end if
  833.     repeat with xsprnum = 20 to 20 + chdiv
  834.       set the text of member xcastnum = string(curvalue) & "--"
  835.       puppetSprite xsprnum, true
  836.       set the locv of sprite xsprnum = curv - 9
  837.       set the loch of sprite xsprnum = Chartrect_left - 48
  838.       set curvalue = curvalue + Increment_y
  839.       set curv = curv - chadd
  840.       set xcastnum = xcastnum + 1
  841.     end repeat 
  842.   end if
  843.   -- bottom edge
  844.   if abs(end_x - start_x) < 10 then
  845.     set the floatPrecision = 2
  846.   else
  847.     set the floatPrecision = 0
  848.   end if
  849.   if Increment_x <> 0 then
  850.     set chdiv = (end_x - start_x) / Increment_x
  851.     if chdiv < 0 then
  852.       set chdiv = 0 - chdiv
  853.       set Increment_x = 0 - increment_x
  854.     end if
  855.     if chdiv <> 0 then set chadd = cwidth / chdiv
  856.     set xcastnum = ( the number of member "Bottom_Tics1" )
  857.     set curvalue = Start_x
  858.     set curv = chartrect_left
  859.     repeat with xsprnum = 30 to 30 + chdiv
  860.       set the text of member xcastnum = "|" & RETURN & string(curvalue)
  861.       puppetSprite xsprnum, true
  862.       set the locv of sprite xsprnum = Chartrect_bottom - 8 
  863.       set the loch of sprite xsprnum = Curv - 20
  864.       set curvalue = curvalue + Increment_x
  865.       set curv = curv + chadd
  866.       set xcastnum = xcastnum + 1
  867.     end repeat 
  868.   end if
  869.   updatestage
  870.   set the floatPrecision = 2
  871. end
  872.  
  873. -- Draw the chart
  874. --
  875. -- recieves bomber - main airplane
  876. --          basher - airplane to display data about
  877. --          chrite - sprite channel to use for drawing
  878. --
  879. -- for main line pass same plane for bomber and basher
  880.  
  881. on chewchart bomber,basher, chrite
  882.   global Start_x, End_x, Start_y, End_y, Increment_x, Increment_y
  883.   global cLabel_x, cLabel_y, cParam_name, cParam_value
  884.   global currentChartName, fixedchartname
  885.   if start_y = end_y then
  886.     set end_y = 1000
  887.     set start_y = 0
  888.   end if
  889.   set cParam_value = the text of member "current param"
  890.   if word 2 of cParam_value = "nm" then
  891.     set cParam_value = word 1 of cParam_value
  892.   end if
  893.   -- open query based on chart name
  894.   set queryname = fixedchartname & "Values"
  895.   set qdHandle =DGQDOpen(queryname,dbHandle)
  896.   if qdHandle="#ERROR#" then
  897.     alert "Error:"&&GetLastDGError()
  898.   end if
  899.   if DGQDsetParameterValue("Bomb Plane", bomber, qdhandle) = "#ERROR#" then 
  900.     alert "bomb:"&&GetLastDGError()
  901.   end if
  902.   if DGQDsetParameterValue("Model", basher, qdhandle) = "#ERROR#" then 
  903.     alert "model:"&&GetLastDGError()
  904.   end if
  905.   if cParam_name <> "" then
  906.     --    if cParam_value = "Sea Level" then set cParam_value = 0
  907.     if   DGQDsetParameterValue(cParam_name, cParam_value, qdhandle) = "#ERROR#" then 
  908.       alert cParam_name&&GetLastDGError()&& "="&&cParam_value
  909.     end if
  910.   end if
  911.   set rsHandle=DGQDCreateRS(qdHandle)
  912.   if rsHandle = "#ERROR#" then 
  913.     alert "DB error"
  914.   else
  915.     set foundcount = DGRSGetFieldCount(rsHandle)
  916.     puppetSprite chrite, true
  917.     if cLabel_x <> "" then set x1 = DGRSGetFieldValue(cLabel_x,rsHandle)
  918.     if x1 <> "#ERROR#" then
  919.       if cLabel_y <> "" then set y1 = DGRSGetFieldValuech(cLabel_y,rsHandle)
  920.       if y1 <> "#ERROR#" then
  921.         -- hard wired for the 2 charts that have only 1 set of numbers
  922.         if fixedChartName = "Landing_Distance" then
  923.           if bomber = basher then 
  924.             drawaline(chrite, Start_x, ((End_y-start_x)*.05), x1, ((End_y-start_x)*.05))  
  925.           else
  926.             drawaline(chrite, Start_x, ((End_y-start_x)*.1), x1, ((End_y-start_x)*.1))
  927.           end if
  928.         else
  929.           if fixedChartName = "Time_to_Climb" then
  930.             drawaline(chrite, start_x, start_y, x1, y1)
  931.           else
  932.             -- generic chart behavior
  933.             repeat while true
  934.               if DGRSIsEof(rsHandle) then exit repeat
  935.               set x2 = DGRSGetFieldValuech(cLabel_x,rsHandle)
  936.               set y2 = DGRSGetFieldValuech(cLabel_y,rsHandle)
  937.               drawaline(chrite, x1, y1, x2, y2)
  938.               set x1 = x2
  939.               set y1 = y2
  940.               DGRSMoveNext(rsHandle)
  941.             end repeat
  942.           end if
  943.         end if
  944.       else alert("No Data Available For Selected Plane/Configuration")
  945.     else alert("No Data Available For Selected Plane/Configuration")
  946.   end if
  947.   puppetSprite chrite, false
  948.   -- close database
  949.   if DGQDIsOpen(qdhandle) then
  950.     DGQDClose(qdhandle)
  951.   end if 
  952.   if DGRSIsOpen(rsHandle) then 
  953.     DGRSClose(rsHandle)
  954.   end if 
  955.   set the loch of sprite chrite = -1000
  956.   set the locv of sprite chrite = 1000  
  957.   updatestage
  958. end
  959.  
  960.